// 使用class关键字来定义一个类
/**
 * 类中主要包含了两个部分：
 *          属性
 *          方法
 */
class Person {
  /**
   * 直接定义的属性是实例属性，需要通过对象的实例去访问
   *          const p = new Person()
   *          p.name
   * 
   * 使用static 开头的属性是静态属性（类属性），可以直接通过类去访问
   *          Person.age
   * 
   * readonly开头的属性表示一个只读的属性无法修改
   */

  // 定义实例属性
  // readonly name: string = '王总'
  name: string = '王总'

  // 在属性前使用static关键字 可以定义类属性（静态属性）
  // static readonly age: number = 18
  age: number = 18

  // 定义方法
  /**
   * 如果方法以static开头则方法就是类方法，可以直接通过类去调用
   */
  // static sayHello() {
  sayHello() {
    console.log('hello')
  }
}


const p = new Person()
console.log(p) //只能访问到name，访问不到age
// p.name = '小王'  //添加 readonly 后 只能读取，不能修改
console.log(p)

// console.log(Person.age) //static声明的属性 只能用类去访问才能访问到

// Person.sayHello()
p.sayHello()
